import numpy as np
import matplotlib.pyplot as plt

def gaussian_mf(x, c, sigma):
    """
    一型高斯隶属度函数
    :param x: 输入值或数组
    :param c: 中心位置
    :param sigma: 标准差
    :return: 隶属度值
    """
    return np.exp(-((x - c) ** 2) / (2 * sigma ** 2))

# 示例：定义"适度转向"的隶属函数
x = np.linspace(-1, 1, 100)  # 方向盘转角归一化到[0,1]
c = 0.0   # 中心位置（中等转向）
sigma = 0.15  # 标准差

mu = gaussian_mf(x, c, sigma)




def interval_type2_gaussian_mf(x, c, sigma1, sigma2):
    """
    区间二型高斯隶属度函数（不确定标准差）
    :param x: 输入值或数组
    :param c: 中心位置（固定）
    :param sigma1: 较小的标准差（上隶属函数）
    :param sigma2: 较大的标准差（下隶属函数）
    :return: (lower_mu, upper_mu) 隶属度区间
    """
    upper_mu = np.exp(-((x - c) ** 2) / (2 * sigma1 ** 2))  # 上隶属函数（σ较小）
    lower_mu = np.exp(-((x - c) ** 2) / (2 * sigma2 ** 2))  # 下隶属函数（σ较大）
    return lower_mu, upper_mu

# 示例参数
c = 1
sigma1 = 0.1  # 严格标准
sigma2 = 0.3  # 宽松标准

lower_mu, upper_mu = interval_type2_gaussian_mf(x, c, sigma1, sigma2)

# 可视化
plt.figure(figsize=(8, 4))
plt.plot(x, upper_mu, 'r--', linewidth=2, label=f'Upper MF (σ={sigma1})')
plt.plot(x, lower_mu, 'b--', linewidth=2, label=f'Lower MF (σ={sigma2})')
plt.fill_between(x, lower_mu, upper_mu, color='gray', alpha=0.3, label='FOU (Footprint of Uncertainty)')
plt.title('Interval Type-2 Gaussian MF (Uncertain Standard Deviation)')
plt.xlabel('Speed')
plt.ylabel('Membership Degree')
plt.legend()
plt.grid()
plt.show()